package cn.nawang.ebeim.api.repository.impl;

import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import org.hibernate.SQLQuery;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.nawang.ebeim.api.comm.BaseQuery;
import cn.nawang.ebeim.api.domain.User;
import cn.nawang.ebeim.api.utils.Constant;

/**
 * 
 * @ClassName: SpaceSzieCount
 * @Description: 统计存储空间大小
 * @author lizh
 * @date 2015年10月14日 下午3:19:51
 * @version v1.0
 */
@Repository
public class SpaceSizeCountImpl extends BaseQuery {


  @Autowired
  private EntityManagerFactory entityManagerFactory;

  /**
   * 
   * @author lizh
   * @Description: 根据客户编号统计出该客户所有数据源的已用空间大小
   * @param customerId
   * @return int
   * @date 2015年10月14日下午3:23:37
   *
   * @修改人
   * @修改日期
   */
  public double getUsageSpaceSizeByCustomer(User user) {
    String sql = "select SUM(space_usage) as space_usage from tb_datasource where ";
    if(Constant.ROLE_USER.equals(user.getRole())){
      sql+=" create_user_id = '"+user.getId()+ "'";
    }else{
      sql+=" customer_id = '"+user.getCustomerId()+"'";
    }
    List<Map> objList = null;
    Double spaceSize = 0.0;
    objList = find(sql);
    if (objList != null && !objList.isEmpty() && objList.get(0).get("space_usage") != null) {
      spaceSize = Double.valueOf(objList.get(0).get("space_usage").toString());
    }
    return spaceSize;
  }

  /**
   * 
   * @author: huanghj
   * @Description: 根据用户查询出已使用的空间大小
   * @param @param userId
   * @param @return
   * @return double
   * @date 2015年10月24日上午9:04:54
   *
   * @修改人
   * @修改日期
   */
  public long getUsageSpaceSizeByUser(String userId) {
    String sql = "select SUM(space_usage) as space_usage from tb_datasource where create_user_id = "
        + "'" + userId + "'";
    List<Map> objList = null;
    long spaceSize = 0l;
    objList = find(sql);
    if (objList != null && !objList.isEmpty() && objList.get(0).get("space_usage") != null) {
      spaceSize = Long.valueOf(objList.get(0).get("space_usage").toString());
    }
    return spaceSize;
  }



  /**
   * 
   * @author lizh
   * @Description: 根据用户角色获取数据源统计数据
   * @param user
   * @return List<Map> 
   * @date Nov 5, 201510:29:49 AM
   *
   * @修改人 fanyb
   * @修改日期
   */
  public List<Map> getUsageSpaceSizeByTerminalId(User user) {
    StringBuffer sql = new StringBuffer(
        "SELECT id,customer_id,SUM(space_usage) as space_usage,name FROM tb_datasource where ds_type<>'3' and 1=1 ");
    // 普通用户只统计自己的
    // 管理员统计所有人的
    if(user.getRole().equals(Constant.ROLE_USER)){
      sql.append(" and create_user_id ='").append(user.getId()).append("'");
    }else{
      sql.append(" and customer_id ='").append(user.getCustomerId()).append("'");
    }
    sql.append(" group by id");
    List<Map> objList = null;
    objList = find(sql.toString());
    if (objList != null && !objList.isEmpty() && objList.get(0).get("id") != null) {
      return objList;
    } else {
      return null;
    }

  }



  /**
   * 
   * @author lizh
   * @Description: sql查询公共接口
   * @param sql
   * @return List
   * @date 2015年10月14日下午6:09:41
   *
   * @修改人
   * @修改日期
   */
  public List find(String sql) {
    List<Map> objList = null;
    EntityManager em = entityManagerFactory.createEntityManager();
    try {
      Query query = em.createNativeQuery(sql);
      query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
      objList = query.getResultList();
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      em.close();
    }
    return objList;
  }



}
